// 数据导出页面
const auth = require('../../utils/auth.js');
// 统一：弃用 config.baseUrl，改用 app.globalData.apiBaseUrl
// const config = require('../../utils/config');

Page({
  data: {
    userInfo: {},
    loading: false,
    
    // 导出选项
    exportOptions: {
      dataType: 'all', // all, vision, intervention, social
      dateRange: '30d', // 7d, 30d, 90d, all
      format: 'excel' // excel, pdf, csv
    },
    
    // 数据类型选项
    dataTypes: [
      { value: 'all', label: '全部数据', icon: '📊', description: '包含所有类型的数据记录' },
      { value: 'vision', label: '视力数据', icon: '👁️', description: '视力检测和相关记录' },
      { value: 'intervention', label: '干预记录', icon: '🏥', description: '治疗和干预措施记录' },
      { value: 'social', label: '社交动态', icon: '💬', description: '社交分享和互动记录' }
    ],
    
    // 日期范围选项
    dateRanges: [
      { value: '7d', label: '最近7天' },
      { value: '30d', label: '最近30天' },
      { value: '90d', label: '最近90天' },
      { value: 'all', label: '全部时间' }
    ],
    
    // 格式选项
    formats: [
      { value: 'excel', label: 'Excel格式', icon: '📗', description: '适合数据分析和编辑' },
      { value: 'pdf', label: 'PDF格式', icon: '📄', description: '适合打印和分享' },
      { value: 'csv', label: 'CSV格式', icon: '📝', description: '适合导入其他系统' }
    ],
    
    // 导出历史
    exportHistory: []
  },

  onLoad: function() {
    this.loadUserInfo();
    this.loadExportHistory();
  },

  // 加载用户信息
  loadUserInfo: function() {
  const userInfo = auth.getCurrentUser && auth.getCurrentUser();
    if (userInfo) {
      this.setData({
        userInfo: userInfo
      });
    } else {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      });
      setTimeout(() => {
        wx.navigateBack();
      }, 1500);
    }
  },

  // 加载导出历史
  loadExportHistory: function() {
    wx.request({
      url: `${getApp().globalData.apiBaseUrl}/export/history`,
      method: 'GET',
      header: {
        'Authorization': `Bearer ${auth.getToken()}`
      },
      success: (res) => {
        if (res.statusCode === 200 && res.data.code === 0) {
          this.setData({
            exportHistory: res.data.data || []
          });
        }
      },
      fail: (error) => {
        console.error('加载导出历史失败:', error);
      }
    });
  },

  // 选择数据类型
  selectDataType: function(e) {
    const dataType = e.currentTarget.dataset.type;
    this.setData({
      'exportOptions.dataType': dataType
    });
  },

  // 选择日期范围
  selectDateRange: function(e) {
    const range = e.detail.value;
    const rangeValue = this.data.dateRanges[range].value;
    this.setData({
      'exportOptions.dateRange': rangeValue
    });
  },

  // 选择导出格式
  selectFormat: function(e) {
    const format = e.currentTarget.dataset.format;
    this.setData({
      'exportOptions.format': format
    });
  },

  // 开始导出
  startExport: function() {
    const { exportOptions } = this.data;
    
    wx.showModal({
      title: '确认导出',
      content: `确定要导出${this.getDataTypeLabel(exportOptions.dataType)}吗？`,
      success: (res) => {
        if (res.confirm) {
          this.performExport();
        }
      }
    });
  },

  // 执行导出
  performExport: function() {
    this.setData({ loading: true });

    wx.request({
      url: `${getApp().globalData.apiBaseUrl}/export`,
      method: 'POST',
      header: {
        'Authorization': `Bearer ${auth.getToken()}`,
        'Content-Type': 'application/json'
      },
      data: this.data.exportOptions,
      success: (res) => {
        this.setData({ loading: false });
        
        if (res.statusCode === 200 && res.data.code === 0) {
          const exportResult = res.data.data;
          wx.showToast({
            title: '导出成功',
            icon: 'success'
          });
          
          // 下载文件
          if (exportResult.downloadUrl) {
            this.downloadFile(exportResult.downloadUrl, exportResult.fileName);
          }
          
          // 刷新导出历史
          this.loadExportHistory();
        } else {
          wx.showToast({
            title: res.data.message || '导出失败',
            icon: 'none'
          });
        }
      },
      fail: (error) => {
        this.setData({ loading: false });
        console.error('导出失败:', error);
        wx.showToast({
          title: '网络错误',
          icon: 'none'
        });
      }
    });
  },

  // 下载文件
  downloadFile: function(url, fileName) {
    wx.downloadFile({
      url: url,
      success: (res) => {
        if (res.statusCode === 200) {
          // 保存到相册或文件管理器
          wx.saveFile({
            tempFilePath: res.tempFilePath,
            success: (saveRes) => {
              wx.showModal({
                title: '下载成功',
                content: '文件已保存到本地',
                showCancel: false
              });
            },
            fail: (error) => {
              console.error('保存文件失败:', error);
              wx.showToast({
                title: '保存失败',
                icon: 'none'
              });
            }
          });
        }
      },
      fail: (error) => {
        console.error('下载文件失败:', error);
        wx.showToast({
          title: '下载失败',
          icon: 'none'
        });
      }
    });
  },

  // 查看导出记录
  viewExportRecord: function(e) {
    const record = e.currentTarget.dataset.record;
    if (record.downloadUrl) {
      wx.showModal({
        title: '重新下载',
        content: '是否重新下载此文件？',
        success: (res) => {
          if (res.confirm) {
            this.downloadFile(record.downloadUrl, record.fileName);
          }
        }
      });
    } else {
      wx.showToast({
        title: '文件已过期',
        icon: 'none'
      });
    }
  },

  // 获取数据类型标签
  getDataTypeLabel: function(dataType) {
    const type = this.data.dataTypes.find(t => t.value === dataType);
    return type ? type.label : '未知类型';
  },

  // 获取日期范围标签
  getDateRangeLabel: function(dateRange) {
    const range = this.data.dateRanges.find(r => r.value === dateRange);
    return range ? range.label : '未知范围';
  },

  // 获取格式标签
  getFormatLabel: function(format) {
    const fmt = this.data.formats.find(f => f.value === format);
    return fmt ? fmt.label : '未知格式';
  },

  // 格式化日期
  formatDate: function(dateString) {
    const date = new Date(dateString);
    return `${date.getMonth() + 1}-${date.getDate()} ${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}`;
  }
});
